home *** CD-ROM | disk | FTP | other *** search
/ Enigma Amiga Life 109 / EnigmaAmiga109CD.iso / dalla rivista / amiga.free / sorgenti vari / wolfedit2 2.0.4 source.sit / WolfEdit2 2.0.4 Source / ULevelInfo.p < prev    next >
Text File  |  1995-10-06  |  3KB  |  115 lines

  1. unit ULevelInfo;
  2.  
  3. interface
  4.     uses
  5.         ULevel, UWolfDoc;
  6.  
  7.     procedure IULevelInfo;
  8.     function EditLevelInfo (mapList: TMapListDoc; levelNum: integer): boolean;
  9.  
  10. implementation
  11.     uses
  12.         UDialog, UMusic;
  13.  
  14.     const
  15.  
  16.         levelInfoDlogID = 128;
  17.         badFloorNumAlrtID = 147;
  18.         altNextLevelMenuID = 141;
  19.  
  20.         majorFloorItem = 3;
  21.         minorFloorItem = 4;
  22.         parMinItem = 5;
  23.         parSecItem = 6;
  24.         musicItem = 7;
  25.         altNextLevelItem = 8;
  26.  
  27.     procedure IULevelInfo;
  28.     begin
  29.     end;
  30.  
  31.     procedure SetUpAltNextLevelMenu (mapList: TMapListDoc);
  32.         var
  33.             i: integer;
  34.             m: MenuHandle;
  35.     begin
  36.         m := GetMenu(altNextLevelMenuID);
  37.         for i := CountMItems(m) downto 2 do
  38.             DelMenuItem(m, i);
  39.         for i := 1 to mapList.fNumLevels do
  40.             with mapList.fIndex^^[i].info^^.mapListEntry do
  41.                 AppendMenu(m, StringOf('Floor ', majorFloor : 1, '-', minorFloor : 1));
  42.     end;
  43.  
  44.     function EditLevelInfo (mapList: TMapListDoc; levelNum: integer): boolean;
  45.         var
  46.             h: LevelInfoHandle;
  47.             dlog: TDialog;
  48.             info: LevelInfoRecord;
  49.             item: integer;
  50.  
  51.         procedure LoadLevelInfo;
  52.             var
  53.                 i, min, max: integer;
  54.         begin
  55.             with dlog do begin
  56.                     SetItemNum(majorFloorItem, info.mapListEntry.majorFloor);
  57.                     SetItemNum(minorFloorItem, info.mapListEntry.minorFloor);
  58.                     SetItemNum(parMinItem, info.mapListEntry.parTime div 60);
  59.                     SetItemNum(parSecItem, info.mapListEntry.parTime mod 60);
  60.                     SetItemValue(musicItem, SongIDToMenuItem(info.music, mapList.fMusic));
  61.                     i := info.mapListEntry.altNextLevel + 2;
  62.                     GetItemMinMax(altNextLevelItem, min, max);
  63.                     if i > max then
  64.                         i := 1;
  65.                     SetItemValue(altNextLevelItem, i);
  66.                 end;
  67.         end;
  68.  
  69.         function UnloadLevelInfo: boolean;
  70.             var
  71.                 n: longint;
  72.  
  73.             procedure BadFloorNumber (itemNo: integer);
  74.             begin
  75.                 DoAlert(badFloorNumAlrtID);
  76.                 dlog.SelItemText(itemNo, 0, 32767);
  77.                 UnloadLevelInfo := false;
  78.                 exit(UnloadLevelInfo);
  79.             end;
  80.  
  81.         begin {UnloadLevelInfo}
  82.             with dlog do begin
  83.                     if not GetItemNumInRange(majorFloorItem, n, 0, 9) then
  84.                         BadFloorNumber(majorFloorItem);
  85.                     info.mapListEntry.majorFloor := n;
  86.                     if not GetItemNumInRange(minorFloorItem, n, 0, 9) then
  87.                         BadFloorNumber(minorFloorItem);
  88.                     info.mapListEntry.minorFloor := n;
  89.                     info.mapListEntry.parTime := GetItemNum(parMinItem) * 60 + GetItemNum(parSecItem);
  90.                     info.music := MenuItemToSongID(GetItemValue(musicItem), mapList.fMusic);
  91.                     info.mapListEntry.altNextLevel := GetItemValue(altNextLevelItem) - 2;
  92.                 end;
  93.             UnloadLevelInfo := true;
  94.         end;
  95.  
  96.     begin {EditLevelInfo}
  97.         h := mapList.fIndex^^[levelNum].info;
  98.         SetUpMusicMenu(mapList.fVersion.encounter, mapList.fMusic);
  99.         SetUpAltNextLevelMenu(mapList);
  100.         new(dlog);
  101.         dlog.IGetNewDialog(levelInfoDlogID);
  102.         dlog.SetTitle(StringOf('Level ', levelNum : 1, ' of ', mapList.fFileName));
  103.         info := h^^;
  104.         LoadLevelInfo;
  105.         dlog.Show;
  106.         repeat
  107.             item := dlog.DoModalDialog
  108.         until (item = cancel) | UnloadLevelInfo;
  109.         if item = ok then
  110.             h^^ := info;
  111.         dlog.Free;
  112.         EditLevelInfo := item = ok;
  113.     end;
  114.  
  115. end.